package 简单.字符串;

/**
 * 统计字符串中的单词个数，这里的单词指的是连续的不是空格的字符。
 * <p>
 * 请注意，你可以假定字符串里不包括任何不可打印的字符。
 * <p>
 * 来源：https://leetcode-cn.com/problems/number-of-segments-in-a-string/
 */
public class 字符串中的单词数_434 {

    public static void main(String[] args) {
        String a = "    foo    bar";
        System.out.println(efficientCountSegments(a));
    }

    /**
     * 工具类
     *
     * @param s
     * @return
     */
    public static int countSegments(String s) {
        String trim = s.trim();
        return trim.length() == 0 ? 0 : trim.split("\\s+").length;
    }

    /**
     * 遍历字符串，找单词的第一个字符
     * 需满足条件：
     * 单词的第一个字符不能为空
     * 单词前一个字符必须为空
     *
     * @param s
     * @return
     */
    public static int efficientCountSegments(String s) {
        int count = 0;
        for (int i = 0; i < s.length(); i++) {
            //这里i=0会短路运算，不会出现越界异常
            if ((i == 0 || s.charAt(i - 1) == ' ') && s.charAt(i) != ' ') {
                count++;
            }
        }
        return count;
    }

}
